<?php
namespace Osp\OrderBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity 
* @ORM\Entity(repositoryClass="Osp\OrderBundle\Entity\OrdersRepository")
*/
class Orders
{ 
	/** 
	* @ORM\Id 
	* @ORM\Column(name="id", type="integer") 
	* @ORM\GeneratedValue(strategy="AUTO") 
	*/
	private $id;

    /** 
    * @ORM\ManyToOne(targetEntity="\Osp\UserBundle\Entity\User") 
    * @ORM\JoinColumn(name="utilisateur", referencedColumnName="id", nullable=false, onDelete="CASCADE") 
    */ 
    protected $utilisateur;   

	/** 
    * @ORM\ManyToMany(targetEntity="\Osp\ProductBundle\Entity\Product") 
    * @ORM\JoinTable(name="orders_products", joinColumns={@ORM\JoinColumn(name="order_id", referencedColumnName="id", onDelete="CASCADE")},inverseJoinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id", onDelete="CASCADE")}) 
    */ 
	private $listeProduits;

	/** 
	* @ORM\Column(name="status", type="text") 
	*/ 
	private $status;

    /** 
    * @ORM\Column(name="quantite", type="array") 
    */ 
    private $quantite;


    public function __construct()
    {
        $this->listeProduits = new ArrayCollection();
        $this->quantite = array();
    }


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }


    /**
     * Set utilisateur
     *
     * @param \Osp\UserBundle\Entity\User $utilisateur
     * @return Orders
     */
    public function setUtilisateur($utilisateur)
    {
        $this->utilisateur = $utilisateur;
    
        return $this;
    }

    /**
     * Get utilisateur
     *
     * @return \Osp\UserBundle\Entity\User 
     */
    public function getUtilisateur()
    {
        return $this->utilisateur;
    }

    

    /**
     * Set status
     *
     * @param string $status
     * @return Orders
     */
    public function setStatus($status)
    {
        $this->status = $status;
    
        return $this;
    }

    /**
     * Get status
     *
     * @return string 
     */
    public function getStatus()
    {
        return $this->status;
    }
    

    /**
     * Add listeProduits
     *
     * @param \Osp\ProductBundle\Entity\Product $listeProduits
     * @return Orders
     */
    public function addListeProduit(\Osp\ProductBundle\Entity\Product $listeProduits)
    {
        $this->listeProduits[] = $listeProduits;
    
        return $this;
    }

    /**
     * Remove listeProduits
     *
     * @param \Osp\ProductBundle\Entity\Product $listeProduits
     */
    public function removeListeProduit(\Osp\ProductBundle\Entity\Product $listeProduits)
    {
        $this->listeProduits->removeElement($listeProduits);
    }

    /**
     * Get listeProduits
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getListeProduits()
    {
        return $this->listeProduits;
    }

    /**
     * Get fraisPort
     *
     * @return double
     */
    public function getFraisPort()
    {
        $res = 0;

        foreach($this->listeProduits as $produit)
        {
            $res += 0.10*($produit->getPoids())*($this->quantite[$produit->getId()]);
        }

        return $res;
    }

    /**
     * Get prix
     *
     * @return double
     */
    public function getPrix()
    {
        $res = 0;

        foreach($this->listeProduits as $produit)
        {
            $nb = $this->quantite[$produit->getId()];
            $res += ((0.10*($produit->getPoids())) + $produit->getPrix())*$nb;
        }

        return $res;
    }

    /**
     * Get products
     *
     * @return string
     */
    public function getProducts()
    {
        $res = "";

        foreach($this->listeProduits as $produit)
        {
            $nb = $this->quantite[$produit->getId()];
            $res .= $produit->getLibelle()." (x".$nb."), ";
        }

        $res = substr($res,0,strlen($res)-2);

        return $res;
    }


    /**
     * Add quantite
     *
     * @param integer $productId
     * @param integer $quantite
     * @return Orders
     */
    public function addQuantite($productId, $quantite)
    {
        $this->listeProduits[$productId] = $quantite;
    
        return $this;
    }


    /**
     * Set quantite
     *
     * @param array $quantite
     * @return Orders
     */
    public function setQuantite($quantite)
    {
        $this->quantite = $quantite;
    
        return $this;
    }

    /**
     * Get quantite
     *
     * @return array 
     */
    public function getQuantite()
    {
        return $this->quantite;
    }
}